home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1994 March / Internet Info CD-ROM (Walnut Creek) (March 1994).iso / networking / mail / mh / contrib / jpeek / nexts < prev    next >
Text File  |  1992-08-08  |  3KB  |  93 lines

  1. #! /bin/sh
  2. # ^^^ THIS SHELL NEEDS BUILT-IN test COMMAND FOR SPEED
  3. # $Header: /home/jerry/.bin/RCS/nexts,v 1.3 92/08/09 23:26:33 jerry mh_contrib $
  4. ###    nexts - show next message in an MH sequence
  5. ###    Usage: nexts [sequence-name] [+folder]
  6. ##
  7. ##    IF YOU TYPE AN MH SEQUENCE NAME ON ITS COMMAND LINE, AND THE CURRENT
  8. ##    MESSAGE IS BEFORE THE FIRST MESSAGE IN THAT SEQUENCE, nexts SHOWS
  9. ##    THE FIRST MESSAGE IN THAT SEQUENCE.   OTHERWISE, IT SHOWS THE
  10. ##    NEXT MESSAGE IN THAT SEQUENCE.  IT USES THE MH show PROGRAM.
  11. ##
  12. ##    THE SEQUENCE NAME YOU'RE VIEWING IS STORED IN A FILE NAMED
  13. ##    .nexts.seqname IN THE MH FOLDER DIRECTORY ITSELF.  THIS MEANS
  14. ##    THAT YOU CAN HAVE LOTS OF little FILES HANGING AROUND;
  15. ##    ALSO, IF SOMEONE ELSE IS LOGGED ON TO YOUR ACCOUNT AND THEY
  16. ##    CHANGE THE SEQUENCE NAME, THEIR CHANGE WILL AFFECT YOU.
  17. ##    STILL, THIS IS A GOOD COMPROMISE FOR PEOPLE USING WINDOWS, ETC.
  18. ##
  19. ##    MH 6.7.2 CAN DO THE SAME THING WITHOUT THIS PROGRAM.  EXAMPLE:
  20. ##        show unseen:next
  21. #
  22. #    NOTE TO HACKERS: TABSTOPS ARE SET AT 4 IN THIS CODE
  23. #
  24. #    USE AT YOUR OWN RISK.  SEEMS TO WORK, BUT IT'S YOUR RESPONSIBILITY!
  25. #    PLEASE TELL ME ABOUT BUGS AND FIXES: Jerry Peek, jerry@ora.com
  26.  
  27. mh=/usr/local/mh    # WHERE MH COMMANDS LIVE
  28.  
  29. for arg
  30. do
  31.     case "$arg" in
  32.     [+@]*)
  33.         case "$fol" in
  34.         "")    fol="$arg" ;;
  35.         *)    echo "`basename $0`: only one folder at a time!" 1>&2; exit 1;;
  36.         esac
  37.         ;;
  38.     *)    # NOT A FOLDER, SO IT MUST BE A SEQUENCE NAME:
  39.         case "$seq" in
  40.         "")    seq="$arg" ;;
  41.         *)    echo "`basename $0`: '$arg'?  Only one sequence!" 1>&2; exit 1;;
  42.         esac
  43.         ;;
  44.     esac
  45. done
  46.  
  47. # IF NO SEQUENCE GIVEN, READ DEFAULT:
  48. seqfile="`$mh/mhpath $fol`/.nexts.seqname" || exit 1
  49. if [ -z "$seq" -a -r "$seqfile" ]; then
  50.     # USE SEQUENCE NAME STORED IN FILE
  51.     seq="`/bin/cat $seqfile`" || exit 1
  52. elif [ -n "$seq" ]; then
  53.     # STORE SEQUENCE NAME IN FILE (MAYBE CREATING IT TOO):
  54.     echo "$seq" >$seqfile || exit 1
  55. else
  56.     echo "`basename $0` quitting: I'm confused." 1>&2
  57.     exit 1
  58. fi
  59.  
  60. # PUT CURRENT MESSAGE NUMBER IN $3; IF NONE, GETS THE STRING "(null)"
  61. set x `$mh/mark -list -seq cur $fol` || exit 1
  62. curmsg="$3"
  63.  
  64. # GET MESSAGE NUMBERS TO DEAL WITH INTO $1, $2, ETC.; IF NONE, EXIT:
  65. set x `$mh/scan -format '%(msg)' $seq` || exit 1
  66.  
  67. test -z "$2" && exit 1    # IF NO MESSAGES IN LIST (IF $2 IS EMPTY), EXIT
  68.  
  69. case "$curmsg" in
  70.  
  71. "(null)") $mh/show $2; exit ;;    # NO CURRENT MESSAGE; SHOW FIRST ONE
  72.  
  73. [1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9])
  74.     # THERE'S A CURRENT MESSAGE; FIND NEXT ONE IN SEQUENCE:
  75.     shift
  76.     for msg
  77.     do
  78.         if [ $msg -gt $curmsg ]
  79.         then
  80.             show $msg
  81.             exit 0    # BREAK LOOP AND QUIT...
  82.         fi
  83.     done
  84.     # IF GET HERE, LOOP DIDN'T FIND A NEXT MESSAGE.  QUIT:
  85.     echo "`basename $0`: no next message in '$seq' sequence in ${fol-current folder}" 1>&2
  86.     exit 0
  87.     ;;
  88.  
  89. *)    echo "`basename $0': current message is '$curmsg'!?!" 1>&2
  90.     exit 1
  91.     ;;
  92. esac
  93.